#!/usr/bin/env bash
VERSION=%%VERSION%%
PACKAGE=%%PACKAGE%%
prefix=/usr/local
config=%%DEFAULT_CONFIG%%
configurations=%%CONFIGURATIONS%%
%%COMMON_PACKAGES%%
%%REQUIRED_PACKAGES%%

usage ()
{
	echo "Usage : configure [OPTION]... [--config=CONFIG]"
	echo
	echo "Options:"
	echo "  --prefix=PREFIX         install architecture-independent files in PREFIX"
	echo "                          [/usr/local]"
	echo "  --bindir=DIR            user executables [PREFIX/bin]"
	echo "  --datadir=DIR           read-only architecture-independent data [PREFIX/share]"
	echo "  --libdir=DIR            object code libraries [PREFIX/lib]"
	echo
	echo "Configurations available :"
	for c in $configurations; do
		if [ "$c" = "$config" ]; then
			echo "        $c (Default)"
		else
			echo "        $c"
		fi
	done
}

validate_config ()
{
	test -z "$1" && return 0
	for c in $configurations; do
		if [ "$c" = "$1" ]; then
			return 1
		fi
	done
	return 0
}

check_package ()
{
	name=`echo $1 | cut -d\; -f1`
	version=`echo $1 | cut -d\; -f2`

	echo -n "Checking for package '$name'.." | tee -a config.log
	pkg-config --atleast-version=$version $name
	if [ $? -ne 0 ]; then
		echo " ERROR: Package named '$name' >= $version not found." | tee -a config.log
		echo "Try adjusting your PKG_CONFIG_PATH environment variable." | tee -a config.log
		return 1
	fi
	echo " found." | tee -a config.log
}

check_required_packages ()
{
	echo "Looking for required packages" | tee config.log
	var=required_packages_$config
	for pkg in $common_packages ${!var}; do
		check_package $pkg
		retval=$?
		[ $retval -ne 0 ] && return $retval
	done
	return 0
}

while test x$1 != x; do
		case $1 in
		--prefix=*)
				prefix=`echo $1 | sed 's/--prefix=//'`
				;;
		--prefix)
				shift
				prefix=$1
				;;
		--libdir=*)
				libdir=`echo $1 | sed 's/--libdir=//'`
				;;
		--libdir)
				shift
				libdir=$1
				;;
		--bindir=*)
				bindir=`echo $1 | sed 's/--bindir=//'`
				;;
		--bindir)
				shift
				bindir=$1
				;;
		--datadir=*)
				datadir=`echo $1 | sed 's/--datadir=//'`
				;;
		--datadir)
				shift
				datadir=$1
				;;
		--config=*)
				conf=`echo $1 | sed 's/--config=//'`
				validate_config "$conf"
				if [ $? -eq 1 ]; then
					config=$conf
				else
					echo "Invalid config name - $conf"
					usage
					exit 1
				fi
                ;;
		--help)
			usage
			exit
			;;
		*)
			echo Unknown argument $1 >&2
			usage
			exit 1
			;;
		esac
		shift
done

check_required_packages
[ $? -eq 1 ] && exit 1

if [ -z "$libdir" ]; then
	libdir=$prefix/lib
fi
if [ -z "$bindir" ]; then
	bindir=$prefix/bin
fi
if [ -z "$datadir" ]; then
	datadir=$prefix/share
fi

echo "prefix=$prefix" > config.make
echo "libdir=$libdir" >> config.make
echo "bindir=$bindir" >> config.make
echo "datadir=$datadir" >> config.make
echo "RUNTIME=mono" >> config.make
echo "ASSEMBLY_VERSION=$VERSION.0.0" >> config.make
echo "VERSION=$VERSION" >> config.make
echo "PACKAGE=$PACKAGE" >> config.make
echo "CONFIG=$config" >> config.make

echo
echo "$PACKAGE has been configured with "
echo "        prefix = $prefix"
if [ "$libdir" != "$prefix/lib" ]; then
	echo "        libdir = $libdir"
fi
if [ "$bindir" != "$prefix/bin" ]; then
	echo "        bindir = $bindir"
fi
if [ "$datadir" != "$prefix/share" ]; then
	echo "        datadir = $datadir"
fi
echo "        config = $config"
echo

